/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package Menu;

import TADs.ArvoreBinaria;
import TADs.Fila;
import TADs.Lista;
import TADs.ListaDEC;
import java.io.IOException;
import javax.swing.JOptionPane;

/**
 *
 * @author Achiles
 */
public class Menu {

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) throws IOException {
        int entrada, entrada2; //Controlam o Meunu Principal e o Secundario respectivamente
        
        entrada = 0;//Garante que entra no Menu Principal
        
        //Menu Principal
        while (entrada != 9) {
            entrada = Integer.parseInt(JOptionPane.showInputDialog("Escolha a estrutura:\n\n1 - Fila\n2 - Lista Encadeada\n3 - Lista Duplamente Encadeada Circular\n4 - Árvore\n9 - Sair"));
            switch (entrada) {
                case 1:
                    //Fila
                    entrada2 = 0;
                    Fila F = new Fila();
                    while (entrada2 != 4) {
                        entrada2 = Integer.parseInt(JOptionPane.showInputDialog("Escolha a opção:\n1 - Insere\n2 - Consulta\n3 - Remove\n4 - Retorna ao Menu anterior"));
                        switch (entrada2) {
                            case 1:
                                //Insere
                                F.inserir(Integer.parseInt(JOptionPane.showInputDialog("Digite o Elemento a ser inserido")));
                                break;
                            case 2:
                                //Consulta
                                F.consultar();
                                break;
                            case 3:
                                //Remove
                                F.excluir();
                                break;
                            case 4:
                                //Retorna ao menu anterior
                                break;
                            default:
                                JOptionPane.showMessageDialog(null, "Entrada Inválida!", "Erro", JOptionPane.ERROR_MESSAGE);
                                break;
                        }
                    }
                    break;
                case 2:
                    //Lista Encadeada
                    entrada2 = 0;
                    Lista L = new Lista();
                    while (entrada2 != 6) {
                        entrada2 = Integer.parseInt(JOptionPane.showInputDialog("Escolha a opção:\n1 - Insere\n2 - Consulta\n3 - Remove\n4 - Exibe o Total de Nós\n5 - Verifica Se a Lista Está Vazia\n6 - Retorna ao Menu anterior"));
                        switch (entrada2) {
                            case 1:
                                //Insere
                                L.inserir(Integer.parseInt(JOptionPane.showInputDialog("Digite o Elemento a ser inserido")));
                                break;
                            case 2:
                                //Consulta
                                L.exibirLista();
                                break;
                            case 3:
                                //Remove
                                L.excluirNo(Integer.parseInt(JOptionPane.showInputDialog("Digite o Elemento a ser Removido")));
                                break;
                            case 4:
                                //Exibe Total de Nós
                                JOptionPane.showMessageDialog(null, "O Total de Nós É: " + L.getTotalNos());
                                break;
                            case 5:
                                //Verifica Vazia
                                if (L.Vazia()) {
                                    JOptionPane.showMessageDialog(null, "A Lista Está Vazia!");
                                } else {
                                    JOptionPane.showMessageDialog(null, "A Lista Não Está Vazia!");
                                }
                                break;
                            case 6:
                                //Retorna ao menu anterior
                                break;
                            default:
                                JOptionPane.showMessageDialog(null, "Entrada Inválida!", "Erro", JOptionPane.ERROR_MESSAGE);
                                break;
                        }
                    }
                    break;
                case 3:
                    //Lista Duplamente Encadeada Circular
                    entrada2 = 0;
                    ListaDEC LDEC = new ListaDEC();
                    while (entrada2 != 6) {
                        entrada2 = Integer.parseInt(JOptionPane.showInputDialog("Escolha a opção:\n1 - Insere\n2 - Consulta\n3 - Remove\n4 - Exibe o Total de Nós\n5 - Verifica Se a Lista Está Vazia\n6 - Retorna ao Menu anterior"));
                        switch (entrada2) {
                            case 1:
                                //Insere
                                LDEC.inserir(Integer.parseInt(JOptionPane.showInputDialog("Digite o Elemento a ser inserido")));
                                break;
                            case 2:
                                //Consulta
                                LDEC.exibirLista();
                                break;
                            case 3:
                                //Remove
                                LDEC.excluirNo(Integer.parseInt(JOptionPane.showInputDialog("Digite o Elemento a ser Removido")));
                                break;
                            case 4:
                                //Exibe Total de Nós
                                JOptionPane.showMessageDialog(null, "O Total de Nós É: " + LDEC.getTotalNos());
                                break;
                            case 5:
                                //Verifica Vazia
                                if (LDEC.Vazia()) {
                                    JOptionPane.showMessageDialog(null, "A Lista Está Vazia!");
                                } else {
                                    JOptionPane.showMessageDialog(null, "A Lista Não Está Vazia!");
                                }
                                break;
                            case 6:
                                //Retorna ao menu anterior
                                break;
                            default:
                                JOptionPane.showMessageDialog(null, "Entrada Inválida!", "Erro", JOptionPane.ERROR_MESSAGE);
                                break;
                        }
                    }
                    break;
                case 4:
                    //Ávore Binária de Busca
                    entrada2 = 0;
                    ArvoreBinaria A = new ArvoreBinaria();
                    while (entrada2 != 4) {
                        entrada2 = Integer.parseInt(JOptionPane.showInputDialog("Escolha a opção:\n1 - Insere\n2 - Consulta\n3 - Remove\n4 - Retorna ao Menu anterior"));
                        switch (entrada2) {
                            case 1:
                                //Insere
                                A.inserirNo(Integer.parseInt(JOptionPane.showInputDialog("Digite o Elemento a ser inserido")));
                                break;
                            case 2:
                                //Consulta
                                break;
                            case 3:
                                //Remove
                                break;
                            case 4:
                                //Retorna ao menu anterior
                                break;
                            default:
                                JOptionPane.showMessageDialog(null, "Entrada Inválida!", "Erro", JOptionPane.ERROR_MESSAGE);
                                break;
                        }
                    }
                    break;
                case 9:
                    JOptionPane.showMessageDialog(null, "Fechando :-)");
                    break;
                default:
                    JOptionPane.showMessageDialog(null, "Entrada Inválida!", "Erro", JOptionPane.ERROR_MESSAGE);
                    break;
            }            
        }
    }
}
